home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / usenet / st80_pre4 / new-inst-var.st < prev    next >
Text File  |  1993-07-24  |  3KB  |  99 lines

  1. "    NAME        new-inst-var
  2.     AUTHOR        paul@pplace.COM (Paul Alderman)
  3.     FUNCTION Hints on how to add instance variables to system classes 
  4.     ST-VERSIONS    
  5.     PREREQUISITES     
  6.     CONFLICTS    
  7.     DISTRIBUTION      world
  8.     VERSION        1.1
  9.     DATE    22 Jun 1988
  10. SUMMARY Description of how to add anew instance variable to Process
  11. "
  12. '
  13. From: paul@pplace.COM (Paul Alderman)
  14. Newsgroups: comp.lang.smalltalk
  15. Subject: Adding a new instance variable to class Process
  16. Message-ID: <343@pplace.COM>
  17. Organization: ParcPlace Systems, Palo Alto CA
  18.  
  19. This message is in response to Colin Kendall''s question about adding a
  20. new instance variable to a Process.  I thought I would post this for
  21. others who might be interested.
  22.  
  23. To add a new instance variable to Process, fileIn the following, replacing 
  24. *newInstVarName* with the instance variable name of your choice.
  25.  
  26. Paul Alderman
  27. ParcPlace Systems
  28. support@ParcPlace.com
  29. ....!!sun!!pplace!!support
  30.  
  31. ---comment added by your moderator:
  32.  
  33. None of the stuff in here is really necessary...all you need do is:
  34.     [Process addInstVarName: ''newVar''] forkAt: Processor highIOPriority
  35. and newVar gets added to Process.  Repeat as necessary,.
  36.  
  37. MIW, 2/5/89
  38. '
  39.  
  40. "Define a couple methods temporarily."!
  41. !Behavior methodsFor: 'accessing'!
  42.  
  43. methodDictionary
  44.     ^ methodDict! !
  45.  
  46. !ClassDescription methodsFor: 'organization'!
  47.  
  48. organization: aClassOrganizer
  49.     organization _ aClassOrganizer! !
  50.  
  51.  
  52. "Rename existing class."
  53. Process rename: #OldProcess.!
  54.  
  55. "Create the new class."
  56. Link subclass: #Process
  57.     instanceVariableNames: 'suspendedContext priority myList *newInstVarName* '
  58.     classVariableNames: ''
  59.     poolDictionaries: ''
  60.     category: 'Kernel-Processes'.!
  61.  
  62. "Copy methods and method organizations."
  63. Process methodDictionary: OldProcess methodDictionary copy.!
  64. Process organization: OldProcess organization copy.!
  65. Process class methodDictionary: OldProcess class methodDictionary copy.!
  66. Process class organization: OldProcess class organization copy.!
  67.  
  68. "Remove temporary methods."
  69. Behavior removeSelector: #methodDictionary.!
  70. ClassDescription removeSelector: #organization:.!
  71.  
  72. "Swap References."
  73. ( Smalltalk associationAt: #OldProcess )
  74.     become: ( Smalltalk associationAt: #Process )!
  75.  
  76. "Rehash the System Dictionary."
  77. Smalltalk rehash.!
  78.  
  79. "Recompile in the new class."
  80. Process compileAll.!
  81. Process class compileAll.!
  82.  
  83. "Finish the transformation."
  84. [
  85.     "Mutate old processes into new processes."
  86.     Process updateInstancesFrom: OldProcess.
  87.  
  88.     "Remove old class."
  89.     OldProcess removeFromSystem.
  90.     SystemOrganization removeElement: #OldProcess.
  91.  
  92. ] forkAt: Processor highIOPriority.!
  93.  
  94. "Reset the display."
  95. Cursor normal show.
  96. ScheduledControllers searchForActiveController.!
  97.  
  98.  
  99.